package io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * 使用文件输入流从文件中读取字节数据
 */
public class FISDemo {
    public static void main(String[] args) throws IOException {
        /*
            fos.dat文件数据:
            00000001 00000010
         */
        FileInputStream fis = new FileInputStream("./fos.dat");
        /*
            在字节输入流超类:java.io.InputStream上定义了读取字节的相关方法

            int read()
            读取1个字节,以int类型返回.此时返回的int值对应的2进制"低八位"有效,即:读取的字节内容
            但是如果返回值为整数-1则表示流读取到了末尾
            对于文件流而言,如果read方法返回值为整数-1则表示EOF(end of file)文件末尾


            例如:
            第一次调用:
            int d = fis.read();//读取文件的第一个字节

            fos.dat内容:
            00000001 00000010
            ^^^^^^^^
            读取的字节

            此时read方法返回值:d的2进制样子:
            d:00000000 00000000 00000000 00000001
              |------自动补充24位0------|  读取的字节
         */

        int d = fis.read();
        System.out.println(d);//1

        /*
            第二次调用:
            d = fis.read();//读取文件的第二个字节

            fos.dat内容:
            00000001 00000010
                     ^^^^^^^^
                     读取的字节

            此时read方法返回值:d的2进制样子:
            d:00000000 00000000 00000000 00000010
              |------自动补充24位0------|  读取的字节
         */
        d = fis.read();
        System.out.println(d);//2

        /*
            第三次调用:
            d = fis.read();//读取文件的第三个字节

            fos.dat内容:
            00000001 00000010
                              ^^^^^^^^
                              文件末尾

            此时read方法返回值:d的2进制样子:
            d:11111111 11111111 11111111 11111111
              |-----返回int型整数-1的2进制---------|
         */
        d = fis.read();
        System.out.println(d);

        System.out.println("读取完毕");

        fis.close();
    }
}
